package main

import (
	"django_blog_gin/internal/config"
	"django_blog_gin/internal/repository"
	"django_blog_gin/internal/router"
	"django_blog_gin/internal/svc"
	"django_blog_gin/internal/ws"
	"log"
	"strconv"
)

func main() {
	config.ReadFileSettings("settings.yaml")
	app, svc := router.SetupRouter()

	// 设置信号处理
	ws.SetupSignalHandler(svc.WSManager)

	// 同步ES
	// syncES(svc)

	defer svc.MysqlDb.Close()
	// defer svc.PgDb.Close()
	// defer svc.EsClient

	log.Println("go-博客-服务器启动在端口: 8004")
	if err := app.Run(":8004"); err != nil {
		log.Fatalf("go-博客-服务器启动失败: %v", err)
	}
}

// 同步ES
func syncES(svcCtx *svc.ServiceContext) {
	esRepo := repository.NewEsArticleRepo(svcCtx)
	articleRepo := repository.NewArticle(svcCtx)
	// 创建索引（如果不存在）
	if err := esRepo.DeletedIndex(); err != nil {
		log.Printf("删除旧索引失败: %v", err)
	}
	if err := esRepo.CreateIndex(); err != nil {
		log.Printf("索引已存在或创建失败: %v", err)
	}

	// 分页查询所有文章并同步到ES
	page := 1
	pageSize := 100
	for {
		limit := strconv.Itoa(pageSize)
		offset := strconv.Itoa((page - 1) * pageSize)
		log.Printf("同步第 %d 页文章...", page)
		// 这里需要实现一个获取所有文章的方法
		articles, err := articleRepo.GetArticleList(limit, offset)
		if err != nil {
			log.Fatalf("获取文章列表失败: %v", err)
		}

		for _, article := range articles {
			detail, err := articleRepo.GetArticleDetail(article.Id)
			if err != nil {
				log.Printf("获取文章详情失败(id=%d): %v", article.Id, err)
				continue
			}

			if err := esRepo.CreateDoc(&detail); err != nil {
				log.Printf("同步文章失败(id=%d): %v", article.Id, err)
			}
		}
		if len(articles) < pageSize {
			break
		}
		page++
	}
}
